import router, { syncRoutes } from './router'
import store from './store'
import { getToken } from './utils/auth'
// 没有tokne也能访问的页面
const whiteList = ['/login', '/404']
function getFirstRoutePerms(perms) {
  // perms是所有的权限点，每一个权限点就会对应一个一级菜单
  // 所以：有几个权限点就会有几个一级菜单
  const first = perms.map(item => {
    return item.split(':')[0]
  })
  // first是所有的一级菜单权限数组，但是会有重复的
  console.log('一级路由权限点：', [...new Set(first)])
  return [...new Set(first)]
}
function getSecondRoutePerms(perms) {
  const second = perms.map(item => {
    return item.split(':')[0] + ':' + item.split(':')[1]
  })
  console.log('二级路由权限点：', [...new Set(second)])
  return [...new Set(second)]
}
function getSyncRoutes(first, second) {
  // syncRoutes是所有的动态路由，要筛选出有权限的路由(1级和2级)
  // syncRoutes的每一项是所有的一级路由集合
  // 如果是超级管理员，直接不过滤路由，返回所有的动态路由
  console.log(first, second)

  if (first.includes('*')) {
    return syncRoutes
  }
  const firstRoute = syncRoutes.filter(item => {
    return first.includes(item.permission)
  })
  const res = firstRoute.map(firstItem => {
    const children = firstItem.children.filter(secondItem => {
      return second.includes(secondItem.permission)
    })
    firstItem.children = children
    return firstItem
  })
  return res
}
// 路有前置守卫
router.beforeEach(async(to, from, next) => {
  const token = getToken
  //   如果有token就放行
  if (token) {
    next()
    // 确保当前已经拿到token了，获取用户的权限点

    if (!store.state.user.userProfile.id) {
      const perms = await store.dispatch('user/getProfile')
      console.log(perms)
      //   const perms = await store.dispatch('user/getProfile')
      //   // 得到一级路由菜单权限（截取【0】，去重）
      const first = getFirstRoutePerms(perms)
      //   // 得到二级路由菜单权限（截取【1】，去重）
      const second = getSecondRoutePerms(perms)
      //   console.log('一级菜单的权限集合', first)
      //   console.log('一级菜单的权限集合', second)
      const res = getSyncRoutes(first, second)
      console.log(res)
      res.forEach(item => {
        router.addRoute(item)
      })
      store.commit('menu/setRouteList', res)
    }
  } else {
    // 否则，判断白名单，也放行
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 不是就跳转登录页
      next('/login')
    }
  }
})
